#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 2e5 + 10;
int pre[maxn]; // 并查集数组
int n, m;

int root(int x){
	if(pre[x]==x) {
		return x;
	}
	return pre[x]=root(pre[x]); // 在这里面使用了路径压缩
}

void solve(){
	cin>>n>>m;
	// 初始化并查集数组
	for(int i=1;i<=n;i++){
		pre[i]=i;
	}
	
	for(int i=1;i<=m;i++){
		int op ,x,y;
		cin>>op>>x>>y;
		if(op==1){ // 合并
			pre[root(x)]=root(y);  // 注意这里面是 root
		} else { // 查询
			if(root(x)==root(y)){ // 注意这里面是 root, 不能直接使用 pre
				cout<<"YES"<<'\n';
			} else{
				cout<<"NO"<<'\n';				
			}
		}
	}
	
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
